//
//  UITextFiled+Emoticon.swift
//  表情键盘
//
//  Created by 晁岳山 on 15/10/25.
//  Copyright © 2015年 晁岳山. All rights reserved.
//

import UIKit
extension UITextView {
    
    /**
        代码重构：注意点
        1.修改注释
        2.确认是否需要进一步重构
        3.在一次检查参数和返回值
    
    */
    
    //图片表情完整的字符串内容
    /// 返回完整的表情内容
    var finishEmotionText: String {
        //结论：带有NSAttachment属性的  都是表情图片 否则就是字符串  字符串可以通过range获得
        //遍历属性文本
        let text = attributedText
        var strM = String()
        text.enumerateAttributesInRange(NSRange(location: 0, length: text.length), options: []) { (dict, range, _) -> Void in
            print("----------")
            if let d =  dict["NSAttachment"] as? EmoticonTextAttachment
            {
                strM += d.emoticon.chs ?? ""
                print(d.emoticon)
                print("图片")
            }else {
                let str = (text.string as NSString).substringWithRange(range)
                strM += str
            }
        }
       return strM

    }
    func insertEmoticon(emoticon: Emoticon) {
        
        //1.空白表情点击事件
        if emoticon.isEmpty {
            return
        }
        //2.删除按钮事件
        if emoticon.isRemoved {
            deleteBackward()
            return
        }
        //3.emoji字符串表情
        if let emoji = emoticon.code {
            replaceRange(selectedTextRange!, withText: emoji)
            return
        }
        //4.图片表情的插入（图文混排）
        insetImageEmoticon(emoticon)
        // 5.通知代理 文本变化了 监听textView的value值的变化
        delegate?.textViewDidChange?(self)
    }
    
    //插入图片
    private func insetImageEmoticon(emoticon: Emoticon) {
        let imageText = EmoticonTextAttachment(emoticon: emoticon).imageText(font!)
        //2.记录当前文本的内容
        let attrM = NSMutableAttributedString(attributedString: attributedText)
        attrM.replaceCharactersInRange(selectedRange, withAttributedString: imageText)
        //记录光标的位置
        let range = selectedRange
        attributedText = attrM
        //恢复光标的位置
        selectedRange = NSRange(location: range.location + 1, length: 0)
    }

}